#ifndef __MINIUTIL_MULTINET_SOCKETMUL_EPOLL_H__
#define __MINIUTIL_MULTINET_SOCKETMUL_EPOLL_H__

#include <set>
#include "miniutil/socketmultiplex.h"

namespace miniutil { namespace multinet {

#ifndef WIN32
    class SocketMulplexService_Epoll:public SocketMulplexService
    {
        public:
            SocketMulplexService_Epoll();
            ~SocketMulplexService_Epoll();
            virtual void run();
        protected:
            int mepollfd;
            void initPollFd();
            void do_readable(int);
            void do_writable(int);
            void do_exception(int);
       private:
            std::set<SOCKET> mtcpchecksocs;
            std::set<SOCKET> mudpchecksocs;
            
            void checkTcpAndRemove(int fd);
            void checkUdpAndRemove(int fd);
            void checkTcpAndUpdate(int fd, int event);
            void checkUdpAndUpdate(int fd, int event);
                        
    };


#endif

} }

#endif
